package apuesta.service;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.StatelessSession;
import org.hibernate.Transaction;

import apuesta.dto.EventoDto2;
import apuesta.dto.UsuarioDto;
import apuesta.dto.UsuarioDto2;
import apuesta.hibernate.HibernateFactoryApuesta;

public class UsuarioService{
	
	public UsuarioService() {
		//
	}

	
	
	@SuppressWarnings("unchecked")
	public static List<UsuarioDto> IniciarSesion(String user, String pass){
		List<UsuarioDto> respuesta = null;
		StatelessSession session = null;
		try{
			System.out.println("1");
			session = HibernateFactoryApuesta.getSessionFactory().openStatelessSession();
			System.out.println("2");
			Query query = session.getNamedQuery("query_getUsuario");
			query.setString("p_usuario", user);
			query.setString("p_password", pass);
			System.out.println("3");
			respuesta = query.list();	
			System.out.println("4");
			
		}catch(Exception ex){
			System.err.println("ERROR: "+ex);
		}finally{
			session.close();
		}
		
		return respuesta;
	}
	
	public static boolean RegistrarUsuario(UsuarioDto user){
		StatelessSession session = HibernateFactoryApuesta.getSessionFactory().openStatelessSession();
		
		Transaction tx = session.beginTransaction();
		session.insert(user);
		tx.commit();
		session.close();
		return true;
	}
	
	@SuppressWarnings("unchecked")
	public static List<Object[]> BuscarUsuariosTodo(){
		List<Object[]> respuesta = null;
		
		StatelessSession session = HibernateFactoryApuesta.getSessionFactory().openStatelessSession();
		
		Query query = session
				.createQuery("select u.id_usuario, u.nombres, u.apellidoPaterno, u.apellidoPaterno, " +
							"u.usuario, u.tipoUsuario " +
							"from UsuarioDto u where u.estado=0");
		
		respuesta = (List<Object[]>) query.list();
		
		session.close();
		return respuesta;
	}
	
	public static String getCreditoUsuario(int id_usuario){
		StatelessSession session = null;
		String credito = null;
		try{
			session = HibernateFactoryApuesta.getSessionFactory().openStatelessSession();
			Query query = session.createSQLQuery("select credito_Usuario from t_usuario where Id_Usuario = "+id_usuario);
			credito = query.uniqueResult()+"";
		}catch(Exception ex){
			System.err.println("ERROR: "+ex);
		}finally{
			session.close();
		}
		return credito;
	}
	
	public static void cargarcredito(String credito, String id_usuario){
		StatelessSession session = null;
		try{
			session = HibernateFactoryApuesta.getSessionFactory().openStatelessSession();
			Transaction tx = session.beginTransaction();
			Query query = session.createSQLQuery("update t_usuario set Credito_Usuario = Credito_Usuario+"+credito+" where Id_Usuario = "+id_usuario);
			query.executeUpdate();
			tx.commit();
		}catch(Exception ex){
			System.err.println("ERROR: "+ex);
		}finally{
			session.close();
		}
	}



	public static boolean actualizarCredito(String id_ususario, double monto) {
		boolean r = false;
		Session session = HibernateFactoryApuesta.getSessionFactory().openSession();
		double m = 0;
		try{
			Query query = session.createSQLQuery("select Credito_Usuario from t_usuario where Id_Usuario = "+id_ususario);
			m = Double.parseDouble(query.uniqueResult()+"");
		}catch(Exception ex){
			System.err.println("ERROR: "+ex);
		}finally{
			session.close();
		}
		System.out.println("monto: "+m);
		
		session = HibernateFactoryApuesta.getSessionFactory().openSession();
		Transaction tx = session.beginTransaction(); 
		try{
			
			if(m<monto){
				r = false;
			}else{	
				Query query = session.createSQLQuery("update t_usuario set Credito_Usuario= Credito_Usuario-"+monto+" where Id_Usuario = "+id_ususario);
				r = true;
				query.executeUpdate();
			}
			
			session.flush();
			session.clear();
			
		}catch(Exception ex){
			System.err.println("ERROR: "+ex);
		}finally{
			tx.commit();
			session.close();
		}
		return r;
	}
	
	public static UsuarioDto2 buscar(int id_usu){
		Session sesion = HibernateFactoryApuesta.getSessionFactory().openSession();
		Transaction tx = sesion.beginTransaction();
		UsuarioDto2 e = null;
		try{
			Query query = sesion.createSQLQuery("select * from t_usuario where Id_Usuario = "+id_usu).addEntity("UsuarioDto2", UsuarioDto2.class);
			e = (UsuarioDto2) query.uniqueResult();
		}catch(HibernateException ex){
			System.err.println("no se pudo actualizar: "+ex);
		}finally{
			tx.commit();
			sesion.close();
		}
		return e;
	}
}
